﻿using BCEntity.TMS.MoveHouseConfig.MoveHouseConfig;
using BCEntity.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfig;
using BCEntity.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfigOverWrite;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace BCData.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfigOverWrite
{
    public interface IMoveHouseSpecificationServiceConfigOverWriteData
    {
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigOverWriteId"></param>
        /// <returns></returns>
        Task<MoveHouseSpecificationServiceConfigOverWriteEntity> GetEntityAsync(long moveHouseSpecificationServiceConfigOverWriteId);
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        Task<(IEnumerable<MoveHouseSpecificationServiceConfigOverWriteEntity>, int)> GetListAsync(int pageIndex, int pageSize);
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<MoveHouseSpecificationServiceConfigOverWriteEntity> InsertAsync(MoveHouseSpecificationServiceConfigOverWriteEntity entity);
        /// <summary>
        /// 添加所有
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<int> InsertAllAsync(IEnumerable<MoveHouseSpecificationServiceConfigOverWriteEntity> entities);
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<MoveHouseSpecificationServiceConfigOverWriteEntity> UpdateAsync(MoveHouseSpecificationServiceConfigOverWriteEntity entity);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigOverWriteId"></param>
        /// <returns></returns>
        Task<int> DeleteAsync(long moveHouseSpecificationServiceConfigOverWriteId);
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId"></param>
        /// <returns></returns>
        Task<MoveHouseSpecificationServiceConfigOverWriteEntity> GetEntityByConfigId(long moveHouseSpecificationServiceConfigId);
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId"></param>
        /// <returns></returns>
        Task<MoveHouseSpecificationServiceConfigOverWriteEntity> GetEntityByConfigId(long moveHouseSpecificationServiceConfigId,
            long agentRecordId,string countyCode);
        /// <summary>
        /// 根据分类编号获取代理商价格
        /// </summary>
        /// <param name="moveHouseConfigId"></param>
        /// <param name="provideCode"></param>
        /// <param name="cityCode"></param>
        /// <param name="countyCode"></param>
        /// <param name="agentRecordId"></param>
        /// <param name="enabled"></param>
        /// <returns></returns>
        Task<IEnumerable<MoveHouseSpecificationServiceConfigOverWriteEntity>> GetListByMoveHouseConfigId(long moveHouseConfigId, string provinceCode,
            string cityCode, string countyCode, long? agentRecordId, bool? enabled);

        /// <summary>
        /// 获取最低的价格
        /// </summary>
        /// <param name="provinceCode"></param>
        /// <param name="cityCode"></param>
        /// <param name="countyCode"></param>
        /// <param name="agentRecordId"></param>
        /// <param name="isEnabled"></param>
        /// <returns></returns>
        Task<IEnumerable<MoveHouseMinPriceEntity>> GetMinPrice(string provinceCode, string cityCode,
            string countyCode, long? agentRecordId, bool? isEnabled);
    }
}